package com.example.concurrency.queue;

import com.example.concurrency.queue.thread.Consumer;
import com.example.concurrency.queue.thread.Producer;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * <p>
 * ArrayBlockingQueue
 * 是一个有界的阻塞队列，其内部实现是将对象放到一个数组里。有界
 * 也就意味着，它不能够存储无限多数量的元素。它有一个同一时间能够存储元素数量的上限。
 * 你可以在对其初始化的时候设定这个上限，但之后就无法对这个上限进行修改了（因为它是基于数组实现的，也就具有数组的特性：一旦初始化，大小就无法修改）
 * 。
 * </p>
 *
 * @author Ashe
 * @version V1.2.0
 * @date 2019年08月20日 16:46
 * @modificationHistory=========================逻辑或功能性重大变更记录
 * @modify By: {修改人} 2019年08月20日
 * @modify reason: {方法名}:{原因}
 * ...
 */
public class ArrayBlockingQueueEx {

    /**
     * 主线程
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {
        BlockingQueue queue = new ArrayBlockingQueue(1024);
        Producer producer = new Producer(queue);
        Consumer consumer = new Consumer(queue);
        new Thread(producer).start();
        new Thread(consumer).start();
        Thread.sleep(4000);
    }
}

